.htaccessで画像ファイルへの直リンクを禁止・防止する方法

.htaccessで画像ファイルへの直リンクを禁止する方法

他人のウェブサイトの画像などを無断で直接読み込ませて別サイトで表示させる『直リンク』は非常に迷惑で悪質な行為です。直リンクされると、知らない間にサーバーへ負担がかかってしまう場合があるので、ウェブサイトを管理する上では防止策が必要になってきます。

今回は、.htaccessファイルを使った簡単に出来る直リンクの禁止・防止方法をご紹介します。

自分のURL以外からは直リンクを禁止する方法

自分のウェブサイト以外からは、画像などのファイルへの直リンクを禁止して表示させないように.htaccessファイルに記述を追加する方法です。

.htaccessの記述

一行目のURLの部分を自分の管理しているウェブサイトに変更するだけです。

SetEnvIf Referer "^https://www\.sample\.com" mysite
Order Deny,Allow
Deny from all
Allow from env=mysite

※「http://」の前に「^」を、「.」の前に「\(バックスラッシュ)」を必ず入力します。

URLが統一されていない(SSL対応のhttps、非対応http、www有り無し)場合は、それぞれ記述する必要があるので、SetEnvIf Referer~の部分を改行し追加します。

SetEnvIf Referer "^https://www\.sample\.com" mysite
SetEnvIf Referer "^http://www\.sample\.com" mysite
SetEnvIf Referer "^https://sample\.com" mysite
SetEnvIf Referer "^http://sample\.com" mysite
Order Deny,Allow
Deny from all
Allow from env=mysite

画像があるディレクトリにアップロード

作成した.htaccessファイルをFTPで直リンクを禁止する画像ファイルのあるディレクトリ(フォルダ)にアップロードします。WordPressの場合は、wp-content > uploadsフォルダになります。.htaccessがあるディレクトリ内は、全てが直リンク禁止の対象になるので、PDFやZIPファイルなども同様に直リンク出来なくなります。

デメリット

他からのアクセスを拒否してしまうので、Googleなどの検索エンジンのボットやクローラーがアクセスできなくなり画像検索に表示されなかったり、SNSなどのTwitterやFacebookでシェアする際にOGP画像が表示されなかったりと言ったデメリットがあります。

指定したURLからの直リンクを許可し、それ以外は禁止する方法

この.htaccessファイルに記述を追加する方法は、指定したウェブサイトからは直リンクを許可し画像などのファイルを読み込ませることができます。許可するサイトに、GoogleやYahoo、Bingなどの検索エンジンやSNSなどを個別で指定し、画像だけでなくPDFやZIPなど、ファイル指定もできます。

.htaccessの記述

許可するウェブサイトは、SetEnvIf RefererのURLの部分に追加していきます。許可するボットやクローラーは、SetEnvIf User-Agentに追加していきます。
※以下は例なので、必要に応じて、許可するサイトやボットを設定してください。

SetEnvIf Referer "^https://www\.sample\.com" ok_url
SetEnvIf Referer "google" ok_url
SetEnvIf Referer "yahoo" ok_url
SetEnvIf Referer "bing" ok_url
SetEnvIf User-Agent "^Googlebot.*$" ok_url
SetEnvIf User-Agent "Slurp" ok_url
SetEnvIf User-Agent "msnbot" ok_url
SetEnvIf User-Agent "^facebookexternalhit.*$" ok_url
SetEnvIf User-Agent "^facebookplatform.*$" ok_url
SetEnvIf User-Agent "^Twitterbot.*$" ok_url
<Files ~ "\.(jpg|jpeg|gif|png|pdf|zip)$">
order deny,allow
deny from all
allow from env=ok_url
</Files>

禁止するディレクトリにアップロード

作成した.htaccessファイルをFTPで直リンクを禁止したいディレクトリ(フォルダ)にアップロードします。WordPressの場合は、wp-content > uploadsフォルダになります。

デメリット

直リンクを許可するウェブサイトやボット、クローラーを全て記述する必要があるので、その数が多いと手間がかかり、指定し忘れると表示されないと言ったデメリットがあります。

指定したURLからの直リンクを禁止する方法

一番おすすめなのは、指定したウェブサイトからの直接読み込みを禁止させる方法です。特に指定していないウェブサイトからは画像が表示されるので、検索エンジンやSNSなどへの影響がないので安心です。直リンクされるリスクはあるものの、それ以上に検索エンジンやSNSからのユーザーの流入のチャンスが広がります。直リンクしている悪質なウェブサイトを発見したら、この.htaccessファイルに記述を追加していくと言う流れになります。

.htaccessの記述

直リンクを禁止したい特定のウェブサイトのURLを記述していきます。複数ある場合は、サンプルと同様に改行して追加すればOKです。

複数のサブドメインを使った悪質サイトの場合は、SetEnvIf Referer “^https?://([^/]*.)?sample\.net” chk_url のように指定すれば、全てのサブドメインが対象となるので1行の記述で済みます。

SetEnvIf Referer "^https://www\.sample\.com" ng_url
SetEnvIf Referer "^https://sample\.co\.jp" ng_url
SetEnvIf Referer "^https?://([^/]*.)?sample\.net" chk_url
<Files ~ "\.(jpg|jpeg|gif|png|pdf|zip)$">
order allow,deny
allow from all
deny from env=ng_url
</Files>

禁止するディレクトリにアップロード

作成した.htaccessファイルをFTPで直リンクを禁止したいディレクトリ(フォルダ)にアップロードします。WordPressの場合は、wp-content > uploadsフォルダになります。

まとめ

.htaccessを使って直リンクを全面的に禁止・防止するのは簡単ですが、必要なアクセスまで排除してしまうと大きなデメリットとなってしまいます。ある程度は許容しながらも悪質な直リンクは禁止するといった方法が望ましいかもしれません。